﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using GrayParrot.Web.Controls;
using GrayParrot.Core.Filters;
using FimetContoDeposito.DAL;
using FimetContoDeposito.BLL.Objects;

namespace FimetContoDeposito.BLL.ResultSets
{
    public class AnagraficaArticoliResultSet : ResultSet<ArticoloBag>
	{
        public AnagraficaArticoliResultSet(DTParameters param, IQueryable<ArticoloBag> result)
            : base(param, result)
        {
        }

        public override Expression<Func<ArticoloBag, bool>> ApplyGeneralFilter(string searchPattern)
        {
            var predicate = PredicateBuilder.False<ArticoloBag>();

            if (!string.IsNullOrWhiteSpace(searchPattern))
            {
                predicate = predicate.Or(im => im.Descrizione != null && im.Descrizione.ToString().Contains(searchPattern));
                predicate = predicate.Or(im => im.Tipologia != null && im.Tipologia.ToString().Contains(searchPattern));
                predicate = predicate.Or(im => im.UnitaDiMisura != null && im.UnitaDiMisura.ToString().Contains(searchPattern));
                predicate = predicate.Or(im => im.IsXxxx != null && im.IsXxxx.ToString().Contains(searchPattern));
            }

            return predicate;
        }

        public override Expression<Func<ArticoloBag, bool>> ApplyGeneralColumnsFilter(List<string> columnSearch)
        {
            var predicate = PredicateBuilder.True<ArticoloBag>();

            string m_codice = columnSearch[ColumnIndex];
            string m_descrizione = columnSearch[ColumnIndex];
            string m_isXXXX = columnSearch[ColumnIndex];
            string m_tipologiaArticolo = columnSearch[ColumnIndex];
            string m_TipologiaDiUso = columnSearch[ColumnIndex];
            string m_UnitaDiMisura = columnSearch[ColumnIndex];


            if (!string.IsNullOrWhiteSpace(m_descrizione))
            {
                predicate = predicate.And(im => im.Descrizione.Equals(m_descrizione, StringComparison.InvariantCultureIgnoreCase));
            }

            if (!string.IsNullOrWhiteSpace(m_tipologiaArticolo))
            {
                predicate = predicate.And(im => im.DescrTipologia == m_tipologiaArticolo);
            }

            if (!string.IsNullOrWhiteSpace(m_UnitaDiMisura))
            {
                predicate = predicate.And(im => im.DescrUnitaDiMisura == m_UnitaDiMisura);
            }

            if (m_isXXXX != "0")
            {
                bool m_isX = false;
                if (m_isXXXX == "1")
                    m_isX = true;

                predicate = predicate.And(im => im.IsXxxx == m_isX);
            }
            return predicate;
        }
	}
}
